import { defineStore } from 'pinia';
// 沿用你的 cookies 工具函数
import { getSidebarStatus, setSidebarStatus } from '@/utils/cookies';

// 将 TypeScript 枚举 (Enum) 移到 store 文件顶部或单独的 types 文件中
export enum DeviceType {
  Mobile,
  Desktop,
}

// 定义 App State 的 TypeScript 接口
export interface IAppState {
  device: DeviceType;
  sidebar: {
    opened: boolean;
    withoutAnimation: boolean;
  };
  // statusNumber 的类型看起来应该是 number，而不是 Number 对象
  statusNumber: number;
}

// 使用 defineStore 创建一个名为 'app' 的 store
export const useAppStore = defineStore('app', {
  // state: 定义 store 的初始状态
  state: (): IAppState => ({
    // 从 Cookie 初始化侧边栏打开状态
    sidebar: {
      opened: getSidebarStatus() !== 'closed',
      withoutAnimation: false,
    },
    // 默认为桌面设备
    device: DeviceType.Desktop,
    // 初始状态数字为 0
    statusNumber: 0,
  }),

  // getters: 定义计算属性 (可选，此模块暂时不需要)
  getters: {
    // 示例：可以创建一个 getter 来直接返回侧边栏是否打开
    isSidebarOpened: (state) => state.sidebar.opened,
  },

  // actions: 定义可以修改 state 的方法
  // Pinia 的 actions 既可以处理同步逻辑，也可以处理异步逻辑
  actions: {
    /**
     * 切换侧边栏的打开/关闭状态
     * @param withoutAnimation 是否禁用动画
     */
    toggleSideBar(withoutAnimation: boolean) {
      // 直接通过 this 访问和修改 state
      this.sidebar.opened = !this.sidebar.opened;
      this.sidebar.withoutAnimation = withoutAnimation;
      // 同步状态到 Cookie
      if (this.sidebar.opened) {
        setSidebarStatus('opened');
      } else {
        setSidebarStatus('closed');
      }
    },

    /**
     * 关闭侧边栏
     * @param withoutAnimation 是否禁用动画
     */
    closeSideBar(withoutAnimation: boolean) {
      this.sidebar.opened = false;
      this.sidebar.withoutAnimation = withoutAnimation;
      setSidebarStatus('closed');
    },

    /**
     * 切换设备类型 (Mobile/Desktop)
     * @param device 设备类型
     */
    toggleDevice(device: DeviceType) {
      this.device = device;
    },

    /**
     * 更新状态数字
     * @param newStatusNumber 新的状态数字
     */
    setStatusNumber(newStatusNumber: number) {
      this.statusNumber = newStatusNumber;
    },
  },
});

